////https://ac.nowcoder.com/acm/problem/226831
//
//#include<iostream>
//using namespace std;
//typedef long long ll;
//const int N = 1e5 + 10;
//ll dp[N];
//int dpm;
//
//void find(int pos)
//{
//	if (pos > dp[dpm] || dpm == 0) dp[++dpm] = pos;
//	else
//	{
//		int left = 1, right = dpm;
//		while (left < right)
//		{
//			int mid = (left + right) / 2;
//			if (dp[mid] >= pos) right = mid;
//			else left = mid + 1;
//		}
//		dp[left] = pos;
//	}
//}
//
//int main()
//{
//	int n; cin >> n;
//	for (int i = 1; i <= n; i++)
//	{
//		int t; cin >> t;
//		find(t);
//	}
//	cout << dpm;
//	return 0;
//}